//
//  JXLStatusViewModel.swift
//  MicroBlog
//
//  Created by 贾晓磊 on 16/9/24.
//  Copyright © 2016年 贾晓磊. All rights reserved.
//

import UIKit
import SDWebImage
//  封装首页微博数据网络请求 -> 首页的TableView

class JXLStatusListViewModel: NSObject {
    //懒加载，关注微博用户的数据源
    lazy var statusList: [JXLStatusViewModel] = [JXLStatusViewModel]()
    
    //加载首页数据
    func loadData(isPullup:Bool, callBack: @escaping (Bool, String) -> ()) {
        //从用户模型中获取
        let accessToken = JXLUserAccountViewModel.sharedUserAccountViewModel.accessToken!
        
        //获取上拉加载请求需要的微博ID
        var maxID: Int64 = 0
        //获取下拉刷新请求需要的微博ID
        var sinceId: Int64 = 0
        
        
        if isPullup {
            //上拉加载
            maxID = statusList.last?.status?.id ?? 0
            //解决数据重复问题，需要让微博ID － 1
            if maxID > 0 {
               maxID -= 1
                 }
            
        } else {
            sinceId = statusList.first?.status?.id ?? 0
        }
        
        var message: String = "没有加载到最新微博数据"
        
        
        JXLNetworkingTools.sharedTools.requestStatuses(accessToken: accessToken, maxID: maxID, sinceId: sinceId) { (response, error) in
            
            if error != nil {
                print("网络请求异常: \(error)")
                callBack(false, message)
                return
            }
            
            //把response尝试转成字典，
            guard let dict = response as? [String: Any] else {
                print("你不是一个正确的字典格式")
                callBack(false, message)
                return
            }
            
            //代码执行到此，表示字典的格式没有问题，尝试转成数组
            guard let statusArray = dict["statuses"] as? [[String: Any]] else {
                print("你不是一个正确的字典格式")
                callBack(false, message)
                return
            }
            
            //            //创建临时数组保存对象
            //            var tempArray = [JXLStatus]()
            //            //代码执行到此，表示转数组没有问题，遍历数组，字典转模型
            //            for statusDic in statusArray {
            //                let status = JXLStatus(dict: statusDic)
            //                tempArray.append(status)
            //
            //            }
            //            //  记录返回的数组模型,重新加载数据
            //
            //            self.statusList = tempArray
            //  使用yymodel进行数组字典转成数组模型
            let statusTArray = NSArray.yy_modelArray(with: JXLStatus.self, json: statusArray) as! [JXLStatus]
            
            //定义临时数组，保存对象
            var tempArray:[JXLStatusViewModel] = [JXLStatusViewModel]()
            
            //创建调度组
            let group = DispatchGroup()
            
            
            //遍历tempStatusArray，创建StatusViewModel模型数组
            for status in statusTArray {
                let model = JXLStatusViewModel(status: status)
               
                tempArray.append(model)
                
                //判断是否有单张图片
                if status.pic_urls?.count == 1 {
                  //原创微博图片等于一张，需要下载
                    
                    if let url = status.pic_urls?.first?.thumbnail_pic {
                        
                            group.enter()
                            SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                                
                                print("下载完成\(url)")
                                group.leave()
                            })
                    }
                }
                
                
                if status.retweeted_status?.pic_urls?.count == 1 {
                    //转发微博图片等于一张，需要下载
                    if let url = status.retweeted_status?.pic_urls?.first?.thumbnail_pic {
                        //在调度组中执行任务
                        
                            group.enter()
                            SDWebImageManager.shared().downloadImage(with: URL(string: url), options: [], progress: nil, completed: { (image, error, _, _, url) in
                                
                                print("下载完成\(url)")
                                group.leave()
                            })
                    }
                }
                
            }
            
            
            //  把获取到网络数据设置给stausList
             // self.statusList = tempArray
            //如果是上拉加载，需要把数据追加到原始数据后面
            if isPullup {
                self.statusList.append(contentsOf: tempArray)
            } else {
                //下拉加载
                self.statusList.insert(contentsOf: tempArray, at: 0)
            }
            
            //判断服务端返回的数据个数是否为零
            if tempArray.count > 0 {
                message = "加载了\(tempArray.count)条微博数据"
            }
            
            group.notify(queue: DispatchQueue.main, execute: { 
                
                print("单张图片全部下载完成")
               
                callBack(true,message)
                //延迟2秒
//                DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 2, execute: {
//                    callBack(true,message)
//                })
                
            })
            
           

            
            
            
        }
    }
    
    
    
    
}


